package com.liinxin.flac_management.utils;

import java.io.File;
import java.io.UnsupportedEncodingException;

public class CodeManage {

    /**
     * 将原本为GBK的编码目录或者文件名称解析为Shift_JIS编码
     * @param pathOrName
     * @throws UnsupportedEncodingException
     */
    public static String parseJapanWord(String pathOrName) throws UnsupportedEncodingException {
        if (isDriveLetter(pathOrName)) { // next为文件路径
            System.out.println("输入的为 ---> 文件路径");
            System.out.println("文件路径为 ---> " + pathOrName);

            // 调用将文件输入idea的方法
            String msg = convertFileEncoding(pathOrName);
            return msg;
        } else { // next为文件名
            System.out.println("输入的为 ---> 文件名");
            System.out.println("文件名为 ---> " + pathOrName);

            // 解析乱码的
            String japaneseFileName = new String(pathOrName.getBytes("GBK"), "Shift_JIS");

            System.out.println("乱码转换成功: " + japaneseFileName);
            return japaneseFileName;
        }
    }

    /**
     * 判断是否为盘符
     *
     * @param next 输入的字符串
     * @return true: 是文件路径 false: 不是文件路径
     */
    public static boolean isDriveLetter(String next) {
        // 遍历next
        for (int i = 0; i < next.length(); i++) {
            if (next.charAt(i) == '\\') {
                return true;
            }
        }
        return false;
    }

    /**
     * 根据文件路径将该路径下的所有文件转为gbk, 再转为Shift_JIS
     *
     * @param directoryPath 文件路径
     */
    public static String convertFileEncoding(String directoryPath) {
        File directory = new File(directoryPath);
        if (!directory.isDirectory()) {
            System.out.println("目录不存在");
            return "目录不存在";
        }

        File[] files = directory.listFiles();
        if (files == null) {
            System.out.println("文件夹内没有文件");
            return "文件夹内没有文件";
        }

        for (File file : files) {
            if (file.isFile()) {
                String currentFileName = file.getName();
                try {

                    // 转换编码为日本编码
                    String japaneseFileName = new String(currentFileName.getBytes("GBK"), "Shift_JIS");


                    // 重命名文件
                    File renamedFile = new File(directoryPath + File.separator + japaneseFileName);
                    if (file.renameTo(renamedFile)) {
                        System.out.println("重命名成功: " + currentFileName + " ---> " + japaneseFileName);
                    } else {
                        System.out.println("重命名失败: " + currentFileName);
                    }
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println("成功");
        return "成功";
    }

}
